我有一个脚本,它将元重定向发送到名为account_management.php5的页面,但由于某种原因,它会自动从那里重定向到index.php5。我的.htaccess文件自动处理几个重定向,例如index.html | php5到域根,这是我唯一能看到这个问题的地方,但我不明白为什么。这是我的.htaccess文件:
RewriteEngine On
#remember to change this to aromaclear
RewriteCond %{HTTP_HOST} !^sinaesthesia\.co.uk$ [NC]
RewriteRule ^(.*)$ http://sinaesthesia.co.uk/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php5|html)\ HTTP
RewriteRule ^(.*)index\.(php5|html)$ /$1 [R=301,L]
#translate any .html ending into .php5
RewriteRule ^(.*)\.html$ /$1\.php5
#change / for ?
RewriteRule ^(.*)\.html/(.*)$ /$1\.html?$2
#strip .html from search res page
RewriteRule ^(.*)search/(.*)$ /$1search_results\.html/search=$2
#translate product details link from search res page
RewriteRule ^products/(.*)/(.*)/(.*)$ /product_details.php5?category=$1&title=$2&id=$3 [L]
#Translate products/psorisis/chamomile-skin-cream-P[x] to productview.php5?id=1
RewriteRule ^products/.*-P([0-9]+) /productview.php5?id=$1 [L]
答案 0 :(得分:1)
在RewriteEngine on
RewriteLogLevel 9
RewriteLog /tmp/rw.log
然后重新启动网络服务器。它应该可以帮助您调试问题。
<小时/> 修改抱歉,我没有注意到上面的
.htaccess
。这只能在主apache配置文件中使用。
答案 1 :(得分:1)
错:
RewriteRule ^(.*)\.html$ /$1\.php5
右:
RewriteRule ^(.*)\.html$ /$1.php5
点对点:
RewriteRule ^(.*)\.html$ /$1.php5 [QSA]
在RewriteRule的第二个参数中逃避特殊字符的同样错误也在其他规则中发生,我不知道apache是否会处理它,但我知道你不需要它,因为第二个参数不是regexp
永远不要与%{THE_REQUEST}
比较,这是一件奇怪的事情,你不需要那样做。而且,没有它,这个条件很好。放在那里:
RewriteRule ^(.*)index\.(php5|html)$ $1 [R=301,QSA,L]
现在看看它:
RewriteRule ^(.*)\.html/(.*)$ /$1.html?$2
首先,您仍然接受对.html文件的引用,在尝试将所有.html转换为.php5之后,这里出现了问题。
此外,您将QueryString定义为最初为文件路径的内容,甚至不将其放入密钥中。它不起作用,需要更多的治疗。
#strip .html from search res page
RewriteRule ^(.*)search/(.*)$ /$1search_results.html/search=$2
是不是应该删除.html?因为它实际上是放 .html。也许因为它不是[L]它会在下一个循环中被修复,但你可以在这里修复所有。
#translate product details link from search res page
RewriteRule ^products/(.*)/(.*)/(.*)$ /product_details.php5?category=$1&title=$2&id=$3 [L]
这一整个。*可能不稳定,特别是限制结束。你应该这样做:
RewriteRule ^products/([^/]*)/([^/]*)/([^/]*) /product_details.php5?category=$1&title=$2&id=$3 [L]
# or:
RewriteRule ^products/(.*?)/(.*?)/([^/]*) /product_details.php5?category=$1&title=$2&id=$3 [L]
最后一个看起来是正确的,除了你应该将可能面临的特殊字符剥离为范围分隔符“ - ”。我认为在*之后它不起作用,但只是为了确保并纠正语法:
RewriteRule ^products/.*\-P([0-9]+) /productview.php5?id=$1 [L]