我有一个htaccess重写网址如下:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.mywebsite.com$ [NC]
RewriteRule ^(.*)$ http://mywebsite.com/$1 [R=301,L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^my-page\.html$ /my-page.php [L]
RewriteRule ^my-page/([^/]*)\.html$ /level1.php?num=$1 [L]
RewriteRule ^my-page/([^/]*)/([^/]*)\.html$ /level2.php?level1=$1&level2=$2 [L]
RewriteRule ^([^/]*)\.html$ /level3.php?level3=$1 [L]
以上这些规则会重写从mywebsite.com/my-page.php
到mywebsite.com/my-page.html
的网址。
现在,我要实现的目标是mywebsite.com/my-page/
被重定向到mywebsite.com/my-page.php
(后者又会重写为mywebsite.com/my-page.html
)。
我尝试过,我创建了一个目录" my-page"并尝试将请求从mywebsite.com/my-page/
重定向到/my-page.html
。
我不知道出了什么问题。我可以在网络标签中看到向/my-page/
发出请求并将其重写为mywebsite.com/my-page.htmlmy-page/
,这会产生302状态☹
请帮忙!谢谢。
答案 0 :(得分:0)
您可以尝试使用RedirectMatch来实现此目的。
重定向到my-page.php:
RedirectMatch 301 ^/my-page/ http://mywebsite.com/my-page.php
如果这是您的目标,请立即访问my-page.html:
RedirectMatch 301 ^/my-page/ http://mywebsite.com/my-page.html
或者,什么是最好的 - 更改负责mywebsite.com/my-page.htmlmy-page/
的代码,但我看不出你问的问题:)
答案 1 :(得分:0)
请试试以下内容。每个部分的评论中都有简要说明。
RewriteEngine On
# Trim www.
RewriteCond %{HTTP_HOST} ^www\.mywebsite\.com$ [NC]
RewriteRule ^(.*)$ http://mywebsite.com/$1 [R=301,L]
RewriteBase /
# Redirect /my-page[/] to /my-page.html
# >> Note: change 302 to 301 to make permanent
RewriteRule ^my-page/?$ my-page.html [R=302,L]
# Allow existing files and directories
# Recommended to comment out the first line
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# Rewrite *.html to respective page
RewriteRule ^my-page.html$ my-page.php [L]
RewriteRule ^my-page/([^/]*).html$ level1.php?num=$1 [L]
RewriteRule ^my-page/([^/]*)/([^/]*).html$ level2.php?level1=$1&level2=$2 [L]
RewriteRule ^([^/]*).html$ level3.php?level3=$1 [L]
这里的重要部分是您在进行任何其他重写之前执行所需的重定向(www.
删除除外)。
此外,您之前有两个条件,即如果请求不是针对文件或目录,则继续执行下一个规则,但这不会考虑最后两个规则。因此,如果请求是针对现有文件或目录,则此版本告诉Apache停止所有内容。出于安全考虑,我建议您注释掉检查现有目录的行。