.htaccess重写为index.php无限循环

时间:2014-04-28 19:06:04

标签: php .htaccess rewrite infinite-loop

我正在使用.htaccess和php构建一个干净的url系统。 主要思想是将所有内容重写为index.php并将url拆分为由/分隔的段。 它工作,但当我上传到Web服务器时,我得到一个无限循环错误。

我的.htaccess文件是:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

如果我把事情弄清楚了 - 问题在于它将index.php重定向到它自己,但它不应该因为我有处理所有内容的index.php文件和RewriteCond %{REQUEST_FILENAME} !-f这应该阻止重写。< / p>

请你帮我解决这个问题.htaccess - 我希望它能将所有内容重写为index.php并尽可能便携,所以我可以使用它:

www.mysite.com www.myothersite.com

甚至 www.mysite.com/new /

我还想将像www.mysite.com/articles/2这样的东西重定向到index.php以及www.mysite.com/articles/it/2甚至www.mysite.com/articles/it/search /搜索关键词

1 个答案:

答案 0 :(得分:0)

这里的代码来自Drupal的.htaccess,它使用了你想要实现的“干净网址”方法。

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

在这种情况下,它会将干净的URL附加为“q”查询字符串参数。因此,您的脚本可以根据$_GET['q']检测要传递的内容。

这是另一种方法,来自Wordpress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

这个请求专门查找index.php的请求,并在进行重定向之前将其过滤掉。