如何使用.htaccess创建干净的URL

时间:2013-09-17 14:00:15

标签: php apache .htaccess mod-rewrite

这是我的.htaac​​cess代码。

RewriteEngine On
RewriteRule ^([a-zA-Z0-9]+)/$ movie.php?name=$1
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example\.in$
RewriteRule ^/?$ "http\:\/\/example\.in" [R=301,L]
ErrorDocument 404 /404.php
AddDefaultCharset UTF-8
Header unset ETag
FileETag None

我的网站需要干净的网址。 我已经提到了很多教程和论坛,并创建了上面的代码。 但不工作..几乎我在与代码作斗争。 我不明白清楚的网址概念。我的php页面上是否有任何编码。

<a href='movie.php?name=titanic'> Titanic </a>

我在index.php文件中有这个链接。

点击链接泰坦尼克号时,我想要example.in/movie/titanic

此外,我想通过$ _ [请求]获取值。

我到底要做什么。请不要把这个问题重复,我搜索了很多,并没有清楚地得到这个概念。请帮帮我。

谢谢

3 个答案:

答案 0 :(得分:6)

用以下代码替换您的代码:

ErrorDocument 404 /404.php
AddDefaultCharset UTF-8
Header unset ETag
FileETag None

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+movie\.php\?name=([^\s&]+) [NC]
RewriteRule ^ movie/%1? [R=301,L]

RewriteRule ^movie/([^/]+)/?$ movie.php?name=$1 [L,QSA]

答案 1 :(得分:2)

如果您想拥有干净的网址,那么您必须在html代码中使用干净的网址,例如使用

<a href="/movie/titanic">Titanic</a>

您的重写规则将采用服务器上的地址(实际上并不存在包含/movie文件的titanic目录,并将其翻译为实际的

/movie.php?name=titanic

但是,用户永远不会看到此URL,因为重写将完全在Apache中进行。只要您发送给用户的HTML仅包含“干净”网址,他们就永远不会看到查询字符串。

答案 2 :(得分:0)

RewriteEngine on
RewriteRule ^movie/([0-9a-zA-Z]+)$ movie.php?name=$1 [L]

在.htaccess文件中添加以上代码