2

因此,首先我有一个自定义 url 重写,它将请求变量发送到 php 脚本

重写规则如下:

RewriteRule ^([\w\/-]+)(\?.*)?$ test/index.php?slug=$1 [L,T=application/x-httpd-php]

因此,如果您访问类似domain.com/slug-text它发送slug-textindex.php位于名为 test 的文件夹中的内容。

我想要的是我所有的网址看起来像domain.com/slug-text.html,但slug-test变量仍应发送到index.php文件。

我无法弄清楚的是重定向。我希望将所有旧网址重定向到或domain.com/slug-text发送到位于测试文件夹中的文件。domain.com/slug-text/domain.com/slug-text.htmlslug-textindex.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

我需要改变什么?

4

2 回答 2

3

这条规则:

RewriteRule ^(([\w/\-]+)?[\w-])(/|\.html)?$ test/index.php?slug=$1 [L]

将陷阱domain.com/slug-textdomain.com/slug-text/并发domain.com/slug-text.html送到slug-text内部参数/test/index.phpslug

如果您真的想使用[R=301]从旧网址重定向到新网址,请使用以下命令:

RewriteRule ^(([\w/-]+)?[\w-])/?(?!:\.html)$ http://domain.com/$1.html [L,R=301]
RewriteRule ^(([\w/-]+)?[\w-])\.html$ test/index.php?slug=$1 [L]

另请注意,由于使用显式重定向底部规则被修改为捕获 url 的结尾.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]
于 2013-09-08T10:24:08.377 回答
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 中有两行,第一行将执行从旧 URL 到新 URL 的重定向,第二行将处理请求。

于 2013-09-08T10:24:19.410 回答