我在使用.htaccess文件重定向网址时遇到问题。这就是我的.htaccess文件:
Redirect 301 /file-name/example.php http://www.mysite.com/file-name/example-001.php
Redirect 301 /section-name/example.php http://www.my-site.com/section-name/example-002.php
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.mysite.com$ [NC]
RewriteRule ^(.*)$ http://www.mysite.com/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.*)$ hqtemplates/articles.php?file_name=$2 [L]
php_value session.use_only_cookies 1
php_value session.use_trans_sid 0
现在的问题是,当我转到页面时:www.my-site.com/file-name/example.php
,而不是将我重定向到www.my-site.com/file-name/example-001.php
,它会将我重定向到
www.my-site.com/file-name/example.php?file_name=example-001.php
。
由于某种原因,它将“?file_name = example-001.php”添加到网址。有谁知道为什么会这样,以及如何解决它?
答案 0 :(得分:3)
问题是将mod_alias
重定向规则与mod_rewrite
混合在一起。解决方案是坚持一个。这是纯mod_rewrite方法的解决方案(我只包含问题的相关部分):
RewriteEngine on
# emulate specific mod_alias Redirect rules
#
# Flags explanation:
# [L] = last rule, stop processing further rules
# [R=301] = 301 Redirect
#
RewriteRule ^file-name/example.php$ http://www.mysite.com/file-name/example-001.php [L,R=301]
RewriteRule ^section-name/example.php$ http://www.my-site.com/section-name/example-002.php [L,R=301]
# handle other rewrite requests
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.*)$ hqtemplates/articles.php?file_name=$2 [L]
关于.htaccess中发生了什么,这是重写日志:
(2) rewrite 'file-name/example.php' -> \
'hqtemplates/articles.php?file_name=example.php'
(2) strip document_root prefix: /home/test/hqtemplates/articles.php -> \
/hqtemplates/articles.php
(1) internal redirect with /hqtemplates/articles.php [INTERNAL REDIRECT]
(1) pass through /home/test/Sites/file-name/example-001.php
表明:
mod_rewrite
“RewriteRule ^(。+)/(。*)$ hqtemplates ...”file-name/example.php
现在相当于hqtemplates/articles.php?file_name=example.php
mod_alias
“重定向301 ...”file-name/example-001.php?file_name=example.php