.htaccess文件的问题,以制作SEO友好的URL

时间:2018-01-28 01:13:02

标签: apache .htaccess mod-rewrite url-rewriting

我是网络开发的新手,我正在尝试使用目录根目录下的.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文件吗? 如果不是我该怎么做才能让它发挥作用?

1 个答案:

答案 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,如果包含查询字符串IdName,则将用户重定向到SEO友好URL。 %1是第一个([^&]+)的反向引用,%2是对第二个([^&]+)的反向引用,它匹配除&之外的所有字符。