我是网络开发的新手,我正在尝试使用目录根目录下的.htaccess文件制作SEO友好的网址。我修改了我的apache2.conf文件,使其包含:
sudo a2enmod rewrite
我用以下内容重写mod:
sudo service apache2 restart
我已经用:
重新启动了apache# Turn Rewrite Engine On
RewriteEngine on
# Rewrite for profile.php?Id=1&Name=Name
RewriteRule ^profile/([0-9]+)/([0-9a-zA-Z_-]+)$ php/profile.php?Id=$1&Name=$2 [NC,L]
我的.htaccess位于我的目录的根目录,包含以下内容:
localhost/abc/php/profile.php?Id=1&Name=Name
所以对我来说似乎一切都是正确的,但当我加载我的网页时,我的网址仍然是这样的:
localhost/abc/profile/1/Name
我期待的更像是:
{{1}}
此外,我正在运行UBUNTU 16.04在虚拟机中,不确定是否有帮助
我究竟做错了什么?
apache甚至考虑了我的.htaccess文件吗?
如果不是我该怎么做才能让它发挥作用?
答案 0 :(得分:0)
以下RewriteRule
仅在内部重写网址。
RewriteRule ^/?abc/profile/([0-9]+)/([0-9a-zA-Z_-]+)$ /abc/php/profile.php?Id=$1&Name=$2 [NC,L]
当用户请求localhost/abc/profile/1/Name
时,显示的网址浏览器为localhost/abc/profile/1/Name
,他们实际上正在查看网页localhost/abc/php/profile.php?Id=1&Name=Name
。
您必须添加另一个RewriteRule
才能将用户重定向到SEO友好网址。
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/abc/php/profile.php [NC]
RewriteCond %{QUERY_STRING} Id=([^&]+)&Name=([^&]+)
RewriteRule ^/?abc/php/profile.php$ /abc/profile/%1/%2? [R=301,L]
它检查用户是否正在请求URL localhost/abc/php/profile.php
,如果包含查询字符串Id
和Name
,则将用户重定向到SEO友好URL。 %1
是第一个([^&]+)
的反向引用,%2
是对第二个([^&]+)
的反向引用,它匹配除&
之外的所有字符。