首先,我有一个自定义url重写,它将请求变量发送到php脚本
重写规则如下:
RewriteRule ^([\w\/-]+)(\?.*)?$ test/index.php?slug=$1 [L,T=application/x-httpd-php]
因此,如果您访问domain.com/slug-text
之类的内容,则会将slug-text
发送到位于名为test的文件夹中的index.php
。
我想要的是我的所有网址看起来都像domain.com/slug-text.html
,但slug-test
变量仍应发送到index.php
文件。
和
我无法弄清楚的是重定向。我希望将所有旧网址从domain.com/slug-text
或domain.com/slug-text/
重定向到domain.com/slug-text.html
,并将slug-text
发送到位于测试文件夹中的index.php
文件。
搜索了很多但无法在互联网上的任何地方找到这个问题的答案。
谢谢大家的帮助。
更新: 我的新代码是:
RewriteEngine On
Options +FollowSymlinks
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(([\w/\-]+)?[\w-])(?!:\.html)$ http://domain.com/$1\.html [L,R=301]
RewriteRule ^(([\w/\-]+)?[\w-])(/|\.html)?$ test/index.php?slug=$1 [L]
domain.com/slug-text/
未被重定向到domain.com/slug-text.html
domain.com/slug-text
按预期重定向到domain.com/slug-text.html
我需要改变什么?
答案 0 :(得分:2)
这条规则:
RewriteRule ^(([\w/\-]+)?[\w-])(/|\.html)?$ test/index.php?slug=$1 [L]
将陷阱domain.com/slug-text
,domain.com/slug-text/
和domain.com/slug-text.html
并将slug-text
发送到/test/index.php
param内的slug
。
如果您真的想使用旧网址中的[R=301]
重定向到新网址,请使用以下网址:
RewriteRule ^(([\w/-]+)?[\w-])/?(?!:\.html)$ http://domain.com/$1.html [L,R=301]
RewriteRule ^(([\w/-]+)?[\w-])\.html$ test/index.php?slug=$1 [L]
另请注意,使用显式重定向底部规则会被修改为陷阱网址以.html
结尾
建议(如果您的.htaccess尚未包含此内容)过滤现有文件和文件夹的条件,以免被重定向规则捕获。只需在RewriteRule
行之前添加这些行:
# existing file
RewriteCond %{SCRIPT_FILENAME} !-f
# existing folder
RewriteCond %{SCRIPT_FILENAME} !-d
如果使用符号链接:
# enable symlinks
Options +FollowSymLinks
# existing symlink
RewriteCond %{SCRIPT_FILENAME} !-l
//添加
您的.htaccess文件应如下所示:
RewriteEngine on
Options +FollowSymLinks
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(([\w/-]+)?[\w-])/?(?!:\.html)$ http://domain.com/$1.html [L,R=301]
RewriteRule ^(([\w/-]+)?[\w-])\.html$ test/index.php?slug=$1 [L]
答案 1 :(得分:0)
这应该重定向/ slug-text到/slug-text.html
RedirectMatch ^/([\w-]+)/?$ http://domein.com/$1.html
当slug-text只是字母,数字, - 和_时,就是这种情况。 将slug-text.html重写为php文件并将slug作为参数传递:
RewriteRule ^([\w-]+)\.html$ test/index.php?slug=$1 [R,L]
如果您的.htaccess中有两行,则第一行将从旧版网址重定向到新版本,第二条版本将处理请求。