这应该很简单,但我无法弄清楚。我有这个非常简单的mod_rewrite规则,它只是不想工作。这是.htaccess文件的全部内容。
RewriteEngine On
RewriteRule ^([A-Za-z0-9-_/\.]+)/?$ index.php?page=$1 [L]
如果我调用URL domain.com/foo,它应该将其重写为index.php?page = foo。但相反,它将它重写为index.php?page = index.php。我尝试了多个网址:
在所有情况下,PHP都表现为“page”设置为“index.php”。这不是index.php的错,因为我用一个简单回显'page'值的脚本替换了index.php的全部内容,它仍然以index.php的形式出现。
在我出错的地方真的输了,任何帮助都会很棒!
由于
阿德里安
答案 0 :(得分:2)
任何原因你都不能使用更简单的东西,例如:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L]
如果您试图阻止现有网页重写,那么!-f
将负责(if file does not exist
和if directory does not exist
,然后re-write
)
答案 1 :(得分:0)
我认为这就是你要找的东西。不幸的是,如果URL有其他GET参数(IE,/ some / url / path?page = 1),它确实不能正常工作。
RewriteEngine On
RewriteRule ^(.*)$ index.php?page=$1 [L]
更好的主意。
RewriteEngine On
RewriteRule ^(.*)$ index.php [L,QSA]
QSA标志将转发GET参数,然后在index.php中使用$_SERVER['REQUEST_URI']
和parse_url
来路由请求。
来自http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html:
'qsappend|QSA' (query string append)
This flag forces the rewriting engine to append a query string part
in the substitution string to the existing one instead of replacing it.
Use this when you want to add more data to the query string via a rewrite rule.