Php Apache重写规则没有';不能只使用特定的前缀
我写的剧本有点问题 我有这样的网址:Php Apache重写规则没有';不能只使用特定的前缀,php,apache,rewrite,Php,Apache,Rewrite,我写的剧本有点问题 我有这样的网址: forum.php?f=topic&g=$1&id=$2&alias=$3 forum.php?f=group&g=$1 forum.php 我需要重新编写以下内容: /forum/group/id-alias_topic > forum.php?f=topic&g=[GROUP]&id=[ID]&alias=[ALIAS_TOPIC] /forum/group > forum.php?f
forum.php?f=topic&g=$1&id=$2&alias=$3
forum.php?f=group&g=$1
forum.php
我需要重新编写以下内容:
/forum/group/id-alias_topic > forum.php?f=topic&g=[GROUP]&id=[ID]&alias=[ALIAS_TOPIC]
/forum/group > forum.php?f=group&g=[GROUP]
/forum > forum.php
我试过:
RewriteRule ^forum/([\w'-]+)/([0-9]+)-([\w'-]+) forum.php?f=topic&g=$1&id=$2&alias=$3
RewriteRule ^forum/([\w'-]+) forum.php?f=group&g=$1
RewriteRule ^forum/ forum.php
但它不起作用。它只显示forum.php每个以
/forum
开头的URL都会显示/forum.php
例如,forum.php
将显示文本“主页”
forum.php?f=topic&g=[GROUP]&id=[id]&alias=[alias\u topic]
应该显示“GROUP+id+alias\u topic”
但是如果我访问/forum/android/1-first\u topic
它会显示“主页”
如果我将^forum
替换为,例如^foru
,它会工作。
我已经清理了浏览器缓存并重新启动了apache,但它仍然无法工作。
对于其他浏览器,问题也是一样的。
在my/var/www中有以下文件和目录:
administrator.php assets cache forum_functions.php forum.php functions.php global.php index.php media notfound.php OLD pwdgen.php robots.txt rss.php simple_html_dom.php store.php template v.php
你有什么建议吗
Rewrite.log:因为您没有使用
[L]
(last)标志,也没有使用$
锚定表达式的结尾。在删除前两个后,每个表达式都匹配最后一个规则
例如,此URL将同时匹配第一个和最后一个规则:example.com/forum/group/123 thing
,因为最后一个规则匹配forum/
,如果没有以$
终止,则后面的任何规则都匹配
添加[L]
标志以防止失败,并使用$
# Don't apply these if the file actually exists (like forum.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# This one doesn't really need to terminate in $
RewriteRule ^forum/([^/]+)/([0-9]+)-(.+) forum.php?f=topic&g=$1&id=$2&alias=$3 [L]
# This one must terminate with $
RewriteRule ^forum/([^/]+)$ forum.php?f=group&g=$1 [L]
# As must this one..
RewriteRule ^forum/?$ forum.php [L]
我还将您的[\w'-]+
替换为更简单的[^/]+
,以便将所有内容与下一个/
匹配。在上一条规则中,我添加了/?
,以允许可选的尾随/
。它同样适用于[\w'-]+
,但由于您希望匹配/
之间的所有内容,[^/]+
是一种更常见的模式
上面的每一条规则都将在进行测试和处理,因为您没有使用
[L]
(last)标志,也没有使用$
锚定表达式的结尾。在删除前两条规则后,每一条规则都与最后一条规则相匹配
例如,此URL将同时匹配第一个和最后一个规则:example.com/forum/group/123 thing
,因为最后一个规则匹配forum/
,如果没有以$
终止,则后面的任何规则都匹配
添加[L]
标志以防止失败,并使用$
# Don't apply these if the file actually exists (like forum.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# This one doesn't really need to terminate in $
RewriteRule ^forum/([^/]+)/([0-9]+)-(.+) forum.php?f=topic&g=$1&id=$2&alias=$3 [L]
# This one must terminate with $
RewriteRule ^forum/([^/]+)$ forum.php?f=group&g=$1 [L]
# As must this one..
RewriteRule ^forum/?$ forum.php [L]
我还将您的[\w'-]+
替换为更简单的[^/]+
,以便将所有内容与下一个/
匹配。在上一条规则中,我添加了/?
,以允许可选的尾随/
。它同样适用于[\w'-]+
,但由于您希望匹配/
之间的所有内容,[^/]+
是一种更常见的模式
上述每一条规则都经过测试,并在上进行处理。您必须在规则末尾添加跳过标志以停止其他规则,如
RewriteRule ^forum/([\w'-]+)/([0-9]+)-([\w'-]+)$ forum.php?f=topic&g=$1&id=$2&alias=$3 [S=2]
RewriteRule ^forum/([\w'-]+)$ forum.php?f=group&g=$1 [S=1]
RewriteRule ^forum/$ forum.php
您必须在“重写规则”的末尾添加“停止其他规则”的跳过标志,如
RewriteRule ^forum/([\w'-]+)/([0-9]+)-([\w'-]+)$ forum.php?f=topic&g=$1&id=$2&alias=$3 [S=2]
RewriteRule ^forum/([\w'-]+)$ forum.php?f=group&g=$1 [S=1]
RewriteRule ^forum/$ forum.php
感谢@Michael Berkowski找到了解决方案
sudo nano /etc/apache2/sites-enabled/000-default
并删除所有出现的多视图,然后重新启动apache。由于@Michael Berkowski找到了解决方案
sudo nano /etc/apache2/sites-enabled/000-default
并删除所有出现的多视图,然后重新启动apache。您的代码无法运行。。。如果我删除了.htaccess并且访问了/forum/it,我认为我的服务器有一些问题,但是如果我的/forum.php没有进入/forum/但是进入了/?my error.log,那么没有.htaccess怎么办呢?只说关于php脚本中未定义的php变量的注意事项。没有关于.htaccess的任何内容。我尝试了你的上一个代码,但没有成功。我已经在我的文档根目录中添加了有关文件和文件夹的信息。最后,这个.htaccess文件属于
/
,不属于任何子目录。如果我访问administrator.php,它就会工作。如果我访问/forum/*它会显示应该显示/forum.php的页面。是的,.htaccess进入根目录。不,我的意思是它显示了没有正确参数的/forum.php。您的代码无法工作。。。如果我删除了.htaccess并且访问了/forum/it,我认为我的服务器有一些问题,但是如果我的/forum.php没有进入/forum/但是进入了/?my error.log,那么没有.htaccess怎么办呢?只说关于php脚本中未定义的php变量的注意事项。没有关于.htaccess的任何内容。我尝试了你的上一个代码,但没有成功。我已经在我的文档根目录中添加了有关文件和文件夹的信息。最后,这个.htaccess文件属于/
,不属于任何子目录。如果我访问administrator.php,它就会工作。如果我访问/forum/*它会显示应该显示/forum.php的页面。是的,.htaccess进入根目录。不,我的意思是它显示没有正确参数的/forum.php。Thx,你的代码不工作,它返回我的代码的行为。Thx,你的代码不工作,它返回我的代码的行为相同。