Nic*_*ans 8 .htaccess mod-rewrite redirect mod-alias
我有一个网站,其中包含一组已放入CMS的旧.html和.php页面.
目前在.htaccess文件中有大约30个mod_alias重定向,格式如下:
redirect 301 /oldpage1.html http://www.example.com/newpage1.php
redirect 301 /oldpage2.php http://www.example.com/newpage2.php
redirect 301 /oldpage3.php http://www.example.com/newpage3.php
Run Code Online (Sandbox Code Playgroud)
但我们希望使用mod_rewrite在我们的CMS中拥有漂亮的URL,这将采用该形式http://www.example.com/pagename.php,因此也有以下内容:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1
Run Code Online (Sandbox Code Playgroud)
目前两者正在一起应用,这导致:
http://www.example.com/newpage1.php?page=oldpage1.html
Run Code Online (Sandbox Code Playgroud)
仅当mod_alias重定向301语句未进行匹配时,如何应用重写规则,以便发生以下情况:
http://www.example.com/oldpage1.html- >重定向到 - >
http://www.example.com/newpage1.php- >,它被视为 - >
http://www.example.com/index.php?page=/newpage1.php
任何提示都会非常感激吗?谢谢.
Nic*_*ans 12
我在mod_rewrite和mod_alias的一个很好的解释中找到了答案
问题是mod_rewrite总是出现在mod_alias之前,无论它放在.htaccess中的顺序如何.这与此情况所需的顺序相反.
诀窍是使用RewriteRule [R=301]而不是redirect 301使用mod_rewrite,而不是将其与mod_alias混合使用.
完整的解决方案如下:
RewriteEngine on
RewriteBase /
RewriteRule ^oldpage1.html /newpage1.php [R=301,L]
RewriteRule ^oldpage2.php /newpage2.php [R=301,L]
RewriteRule ^oldpage3.php /newpage3.php [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6375 次 |
| 最近记录: |