.htaccess 不存在的 url 的无限循环

Posted

技术标签:

【中文标题】.htaccess 不存在的 url 的无限循环【英文标题】:.htaccess infinite loop for non existent urls 【发布时间】:2013-07-19 21:59:51 【问题描述】:

我正在处理我的 .htaccess 以获得一个无扩展名的网站。我在网上搜索并实施了一些有效的规则,但是当我输入一个不存在的 url(例如 mysite.com/dsfadfasdf )时,它开始进入无限循环。

如果有人能帮助我摆脱循环并重定向到我选择的页面(我会说该页面不存在),我将非常感激!

Options +FollowSymLinks 
Options +Indexes 
RewriteEngine On 
RewriteBase /

# Redirect www to non www
RewriteCond %HTTP_HOST ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# Home page language
RewriteRule ^(en|ro)/?$ index.php?lang=$1 [L]

# For the profile page
RewriteRule ^(.+)\/accommodation-(.+)\/([0-9]+)\/(.+)$ location.php?id=$3&town=$2&hname=$4&lang=$1 [NC,L]

# Internally rewrite extensionless URL to corresponding .php
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %QUERY_STRING ^(.*)$
RewriteRule ^(.*)$ $1.php?%1 [NC,L,QSA]

# Externally redirect (only) direct client requests for .php URLs to extensionless URLs:
RewriteCond %THE_REQUEST ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.php http://mysite.com/$1 [R=301,L] 

我认为问题出在最后一条规则中。有什么建议吗?

【问题讨论】:

禁用所有规则,并逐个激活以查看它究竟在哪里弄乱了您的网站。我也相信你的问题是# Internally rewrite extensionless URL to corresponding .php 然后***.com/questions/2363520/… 【参考方案1】:

.htaccess 会在 url 改变时继续重写。在您使用 END 标志在内部重写您的 url 后,强制它停止重写:

# Internally rewrite extensionless URL to corresponding .php
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %QUERY_STRING ^(.*)$
RewriteRule ^(.*)$ $1.php?%1 [NC,END,QSA]

Documentation is here.

【讨论】:

以上是关于.htaccess 不存在的 url 的无限循环的主要内容,如果未能解决你的问题,请参考以下文章

Javascript无延迟播放无限循环音频文件

htaccess 和 GEOIP 无限循环

.htaccess重写导致无限循环

一个简单的 301 重定向会在我的 htaccess 中创建一个无限循环?

.htaccess url-rewrite 如果文件不存在

需要 .htaccess 帮助:不存在的 url 301 重定向到 404,而不是直接给出 404