我正在尝试修改.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]
我不知道怎么了。谢谢。
答案 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]