Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex htaccess类似的案例,比如Facebook或Twitter问题_Regex_.htaccess_Mod Rewrite - Fatal编程技术网

Regex htaccess类似的案例,比如Facebook或Twitter问题

Regex htaccess类似的案例,比如Facebook或Twitter问题,regex,.htaccess,mod-rewrite,Regex,.htaccess,Mod Rewrite,我的htaccess中有一行代码会导致错误。对于我的措词不当,我找不到类似的答案 我正在尝试获取“用户名/关注者、用户名/关注者等”以及“设置/帐户、设置/密码等”。我停止对非脚本和图像使用子文件夹,因此所有内容都处于同一级别 现在我知道他们有类似的外壳,但我很好奇Facebook、Twitter等是如何做到这一点的 它们是否压缩到一个大页面以使其工作?我知道它们阻止人们使用设置和其他根级别的名称,而我自己还没有做到这一点 RewriteRule ^([^/]+)$ profile_home.p

我的htaccess中有一行代码会导致错误。对于我的措词不当,我找不到类似的答案

我正在尝试获取“用户名/关注者、用户名/关注者等”以及“设置/帐户、设置/密码等”。我停止对非脚本和图像使用子文件夹,因此所有内容都处于同一级别

现在我知道他们有类似的外壳,但我很好奇Facebook、Twitter等是如何做到这一点的

它们是否压缩到一个大页面以使其工作?我知道它们阻止人们使用设置和其他根级别的名称,而我自己还没有做到这一点

RewriteRule ^([^/]+)$ profile_home.php?userdomain=$1 [L]
RewriteRule ^([^/]+)/([^/]+)$ profile_home.php?userdomain=$1&selection=$2 [L]
RewriteRule ^settings/$ profile_settings.php [L]
RewriteRule ^settings/([^/]+)$ profile_settings.php?selection=$1 [L]
RewriteRule ^settings/([^/]+)/([^/]+)$ profile_settings.php?selection=$1&upload=$2 [L]
如果我删除

RewriteRule ^([^/]+)/([^/]+)$ profile_home.php?userdomain=$1&selection=$2 [L]
然后一切正常。我如何使这两页工作

我可以

RewriteRule ^settings/([^/]+)/$ profile_settings.php?selection=$1 [L]
但它看起来没那么好。如果不适合询问,请告诉我。

这是我的解决方案

RewriteEngine On

# make sure to add your document root dir
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([\w-.]+)/?$ index.php?id=$1 [L,QSA]

RewriteCond %{DOCUMENT_ROOT}/htdocs/user/$2 -f
RewriteRule ^([\w-]+)/(.+)/?$ $2?id=$1&goto=$2 [L,QSA]

RewriteCond %{DOCUMENT_ROOT}/htdocs/user/$2/index.php -f
RewriteRule ^([\w-.]+)/([a-z0-9]+)/?$ $2/index.php?id=$1&goto=$2 [NC,L,QSA]

RewriteRule ^([\w-.]+)/([a-z0-9]+)/?$ index.php?id=$1&goto=$2 [NC,L,QSA]

因此,在您的服务器根目录
htdocs/user/
中,必须有一个像/user/这样的文件夹和一个文件index.php。这个htacess将把文件
site/user/index.php
替换为
site/user/username
在同一用户目录中,您需要在同一个文件夹,我想您理解我的答案。

您的第二条规则匹配两个目录结构。您可以使用负前瞻,以便以
设置开始的请求不符合该规则

^(?!settings)([^/]+)/([^/]+)$
您可以在此处阅读有关lookaheads的更多信息:


  • @天哪,我试过了,它没有做任何我能注意到的事情。我可能应该展示一下:如何工作良好。您的文档根文件夹是什么?我知道如何解决它,但您需要更改为您的文档根目录folder@OtávioBarreto我使用public_html作为我所有php/html文件的文档根。@chris85对,所有设置都属于profile_home,而它们应该属于profile_设置。而这些代码并没有阻止这一切。Apache版本2.4.23让我们来看看。我正在寻找一个文档根解决方案,而不是使用子文件夹,我放弃了它,因为它没有吸引力,更难管理。我也可以不使用文件夹,把用户放在所有我的个人资料主页重写的旁边,但这不是我想要的。它也在根目录中工作,它将把
    site.com/index.php
    替换为
    site.com/username
    它只是在代码中替换为根目录,并让这个
    .htaccess
    文件位于服务器的根目录中,因为它的设计不吸引人,也不容易管理,所以无法为单个文件创建文件夹。我正在寻找非子文件夹解决方案,原因是。我现在压缩了我的公共html,每次我需要批量更新时都会上传并导入到filemanager中,没有子文件夹会让它变得更简单。我想我没有正确地解释你,你不需要为单个文件设置文件夹。php
    也将位于
    index.php'的同一文件夹中,但用户将访问类似的url
    /username/`此文件夹甚至不存在htaccess将其重写到页面
    index.php
    ,因此在您的php中,您必须获取url并将用户名保存在var中,以便在数据库中搜索用户您说过我需要一个文件夹。你解释得一点也不清楚。我有公共html,我的所有文件都在那里。我使用htaccess将所有文件更改为链接。这只是冲突的一小部分。我不希望子文件夹公开我的文件的html。所以我有/user、/user/followers、/user/following,还有/settings/account、/settings/profile等等。它们相互冲突,但我看到其他网站使它们不冲突。我有一个问题,非常具体。我的htaccess现在看起来像这样。4.4月日,论坛论坛(1244)博客,帮助(1244)条款,政策,就业就业就业,设置(1244)周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日难难难难难难难难难难难难难难难难难难难难难难难难!404!404!404!404!论坛政!就业就业,就业就业就业就业,设置设置,重设(重设)重设(重设,注册注册,注册,注册注册,注册注册(124)方方)方(1244)方方)周四周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日)聊[^/]+)/([^/]+)$profile_home.php?userdomain=$1&selection=$2[L]我遇到的问题是/user将工作,但在极少数情况下/someone不工作,并返回404。只有当我去掉所有的底片时,我才会停止这样做。你能发布一个regex101示例来演示这个问题吗?我不能复制它。我有一个新的帖子,我知道这个问题是由回复引起的,但没有解决办法。负数阻止任何具有任何匹配项的用户作为用户名的开始。这很有趣,因为Twitter匹配/settings,但是/settings可以是用户。在规则之后添加
    [NC]
    ,使其不区分大小写。听起来你已经得到了另一个问题的答案。