我正在尝试设置一个简单的重写规则来转换网址,例如:
index.php?page=login
类似
page/login
但是,我一直收到404错误。
有人可以建议为什么以下可能不起作用吗?
htaccess的:
RewriteEngine on
RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L]
rewriteEngine off
我对此很陌生,任何建议都将不胜感激。 感谢。
答案 0 :(得分:2)
我想你可能会倒退。您希望用户输入吗?
http://site.com/page/login
这是更合乎逻辑的情况。如果是这样,请执行以下操作:
RewriteEngine On
RewriteBase /
RewriteRule ^/page/login$ /index.php?page=login [L]
或者,更一般地说:
RewriteRule ^/page/(\w+)$ /index.php?page=$1 [L]
答案 1 :(得分:1)
确保使用RewriteBase。
这些是我通常使用的规则。
他们说任何不是文件或目录的请求都由index.php处理
在脚本中,请求的URI可通过$_SERVER['REQUEST_URI']
获得。
RewriteEngine On
RewriteBase /some_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /some_dir/index.php [L]
答案 2 :(得分:0)
RewriteEngine on RewriteRule ^page/([^/.]+)/?$ index.php?page=$1 [L] rewriteEngine off
为什么要关闭RewriteEnginge?
答案 3 :(得分:0)
VolkerK提出了一个很好的观点:不要同时使用RewriteEngine on
和RewriteEngine off
,因为你不打开重写引擎,添加规则和转弯它再次关闭。 Apache配置不像编程那样工作,你有一组计算机按顺序执行的指令。您可以想象它更像这样:当Apache解析其配置文件(如.htaccess
)时,它首先读入所有指令并将它们排序为将应用它们的自然顺序。它更像是在程序开始时初始化变量的值,无论你在什么顺序编写语句,结果通常都是相同的。
在你的情况下,在同一个文件中指定RewriteEngine on
和RewriteEngine off
可能会混淆Apache,因为(在我的小比喻中)当Apache将指令分类为“自然”顺序时,它最终会出现像
RewriteEngine on
RewriteEngine off
RewriteRule ...
可能会关闭重写引擎。但是,当然,实际发生的事情比仅将指令排序到列表中更复杂,因此您无法确切地告诉Apache将如何处理像您这样的文件。只是不要试图为文件的不同部分打开和关闭重写引擎,并记住Apache的配置指令不仅仅是要按顺序运行的语句。