我有一个网站,我认为我的htaccess没有正确实施301重定向,我认为我的问题可能在应用程序级别,但如果有人能够按照我的预期确认以下工作,我将不胜感激。< / p>
重定向示例:http://www.siteic.com/a/b/c/
应转到http://www.siteic.com/a/b/c
- 但以下内容不会这样做。 注意删除尾部斜杠。
Options +FollowSymLinks
RewriteEngine on
ErrorDocument 404 /
RewriteCond %{HTTP_HOST} ^siteic\.com
RewriteRule ^(.*)$ http://www.siteic.com/$1 [R=permanent,L]
RewriteCond {REQUEST_URI} ^/first/$
RewriteRule ^(.*)$ http://www.siteic.com [R=permanent,L]
RewriteCond {REQUEST_URI} ^/first$
RewriteRule ^(.*)$ http://www.siteic.com [R=permanent,L]
RewriteRule ^first/([a-z,\_%,A-Z,\_%-,0-9,\-]*)$ otherst.php?page=$1
RewriteRule ^first/([a-z,\_%,A-Z,\_%-,0-9,\-]*)/([a-z,\_%,A-Z,\_%-,0-9,\-]*)$ otherst.php?page=$1&page2=$2
答案 0 :(得分:1)
我怀疑你首先统治永远是真的,因此后来的规则永远不会被使用。
你应该使用它:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.your_domain.com$
RewriteRule ^(.*)$ http://www.your_domain.com/$1 [R=301]
你的第二条规则确保所有带字符串'/ first /'的uri重定向到主页。 你的第三条规则与字符串'/ first'完全相同,所以实际上你可以删除你的第二条规则,或者你的第三条规则,取决于你的预期行为。
你的第四条规则永远不会匹配,因为带有“first /”的uri将被重定向到主页。 你的第五条规则应该在你的第四条规则之前,因为规则4通常比规则5更真实。
至于你的请求:如何删除尾部斜杠,我会这样做: - 首先确保路径指向不存在的目录 - 如果为true,则删除斜杠
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]
所以最后我会这样做:
RewriteEngine on
# force WWW in the url
RewriteCond %{HTTP_HOST} !^www.siteic.com$
RewriteRule ^(.*)$ http://www.siteic.com/$1 [R=301]
# remove trailing slash if the url points to a non-existing folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]
# redirects all url with /first to otherst.php
## with 2 GET vars
RewriteRule ^first/([a-z,\_%,A-Z,\_%-,0-9,\-]*)/([a-z,\_%,A-Z,\_%-,0-9,\-]*)$
otherst.php?page=$1&page2=$2
## with 1 GET var
RewriteRule ^first/([a-z,\_%,A-Z,\_%-,0-9,\-]*)$ otherst.php?page=$1