0

我正在尝试修改我的 .htaccess 文件以修改我的 URL,并尝试了很多方法,但无法完全实现我想要的。例如我有这个网址:

http://mywebsite.com/FOLDER/index.php?id=5

现在我希望它看起来像:

http://mywebsite.com/FOLDER/5

或者

http://mywebsite.com/FOLDER/ID/5

我的 .htaccess 包含以下代码:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^index/([0-9]+)/([0-9a-zA-Z_-]+) index.php?id=$1 [NC]

我无法弄清楚出了什么问题。谢谢。

4

2 回答 2

0

的第一个参数RewriteRule是没有域且没有前面的路径(稍后会详细介绍)的传入 url 将被匹配。在您的情况下,此网址是http://mywebsite.com/FOLDER/5. 假设您的.htaccess文件位于 DocumentRoot 中,则正则表达式将匹配FOLDER/5.

您当前正在尝试与 匹配FOLDER/5^index/([0-9]+)/([0-9a-zA-Z_-]+)但这是行不通的。更好的正则表达式是^(.*)/([0-9]+)$or ^(.*)/ID/([0-9]+)$。然后,您可以重写为$1/index.php?id=$2. 我建议使用该[L]标志来停止这一轮的重写,以避免出现多个规则匹配的常见问题,而您并不期望它们这样做。


除此之外,请确保您的.htaccess文件正在被读取(例如,通过检查是否输入垃圾,您会收到 500 内部服务器错误),启用 mod_rewrite,允许您覆盖FileInfo. 您可能还需要AcceptPathInfo关闭。

于 2018-07-14T13:38:46.420 回答
0

您可以使用:

RewriteEngine on

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} \s/+FOLDER/index\.php\?id=(\d+) [NC]
RewriteRule ^ /FOLDER/%1? [R=301,L,NE]

# internal forward from pretty URL to actual one
RewriteRule ^FOLDER/(\d+)/?$ FOLDER/index.php?id=$1 [L,QSA,NC]
于 2018-07-14T18:10:59.080 回答