编辑.htaccess文件以修改URL

时间:2018-07-14 02:19:43

标签: apache .htaccess mod-rewrite

我正在尝试修改.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]

我不知道怎么了。谢谢。

2 个答案:

答案 0 :(得分:0)

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

您当前正在尝试将FOLDER/5^index/([0-9]+)/([0-9a-zA-Z_-]+)匹配,这将无法正常工作。更好的正则表达式为^(.*)/([0-9]+)$^(.*)/ID/([0-9]+)$。然后,您可以重写为$1/index.php?id=$2。我建议使用[L]标志在这一轮中停止重写,以避免在您不希望出现多个规则匹配的常见问题的情况下。


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

答案 1 :(得分: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]