【问题标题】:PHP clean URL with no php extension没有 php 扩展名的 PHP 干净 URL
【发布时间】:2014-09-23 00:31:36
【问题描述】:

这是我的.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。 我查阅了很多教程和论坛并创建了上述代码。 但它不起作用。几乎我正在与代码作斗争。 我不清楚干净的 URL 概念。我必须在我的 PHP 文件中编写任何编码吗?

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

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

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

我也想通过$_[request]获取值。

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

谢谢。

【问题讨论】:

  • 1.你有双重RewriteEngine On; 2.把这个RewriteRule ^([a-zA-Z0-9]+)/$ movie.php?name=$1变成这个RewriteRule ^movie/([a-zA-Z0-9]+)$ movie.php?name=$1。现在您可以从$_GET['name'] 获取电影名称。
  • 将 SEO url 放在 href 中,而不是旧 url。

标签: php apache .htaccess


【解决方案1】:

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

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

[L] 标志在这一轮中停止重写,[NC] 标志忽略大小写。

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

【讨论】:

    【解决方案2】:

    您可以将您的.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 只能启动一次。

    【讨论】: