没有php扩展的PHP干净URL

时间:2014-07-31 06:53:52

标签: php apache .htaccess

这是我的.htaccess代码。

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

我的网站需要一个干净的网址。 我咨询了很多教程和论坛,并创建了上面的代码。 但它不起作用。几乎我在和代码打架。 我不明白清晰的URL概念。我的PHP文件中是否有任何编码?

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

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

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

此外,我想通过$_[request]获取价值。

我到底要做什么?请不要将此问题标记为重复,我已经搜索了很多并且没有清楚地了解这个概念。请帮帮我。

感谢。

2 个答案:

答案 0 :(得分:1)

.htaccess中的规则处理url相对于.htaccess文件所在目录的规则。如果你的www-root中有.htaccess,那么RewriteRule的第一个参数将会匹配域名后面和查询字符串(movie/titanic中的http://example.com/movie/titanic?is=amovie)之前的所有内容。要修复规则,您需要将规则更改为:

RewriteRule ^movie/([a-z0-9]+)/?$ movie.php?name=$1 [L,NC]

[L]标志停止重写此轮次,[NC]标志忽略大小写。

除此之外,您只需要一个RewriteEngine on,这需要超出您编写的所有规则。您可以放心地删除第二个。

答案 1 :(得分:0)

您可以将.htaccess放入主目录:

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

或在movies/目录中:

RewriteEngine On /movies/
RewriteRule ^([a-zA-Z0-9]+)(/)$ ../movie.php?name=$1 [L]

movie.php位于主目录中。

RewriteEngine On每个htaccess只能启动一次。