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

Posted

技术标签:

【中文标题】如何使用 .htaccess 创建干净的 url【英文标题】:How to create clean url using .htaccess 【发布时间】:2013-09-22 00:26:17 【问题描述】:

这是我的 .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

我的网站需要干净的网址。 我参考了很多教程和论坛并创建了上面的代码。 但不工作..几乎我正在与代码作斗争。 我不清楚干净的 url 概念。有没有我要在我的 php 页面上写的编码。

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

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

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

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

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

谢谢

【问题讨论】:

【参考方案1】:
RewriteEngine on
RewriteRule ^movie/([0-9a-zA-Z]+)$ movie.php?name=$1 [L]

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

【讨论】:

【参考方案2】:

用这个替换你的代码:

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]

【讨论】:

我已经按照您的建议进行了更改.. 但是现在 mt 索引页面无法正常工作.. 我的网站是 intamil.in 你可以通过访问我的网站看到那里发生的事情 我进行了编辑。除了intamil.in 似乎工作正常。清楚地解释你的问题,什么不适合你。 @RakeshRajan anub 的回答对我来说看起来不错应该完全按照您的要求工作,您一定是有其他原因导致了问题,所以您应该清楚地告诉我们发生了什么,什么没有发生,以便我们可以指出那个。 这是解决CSS、js问题的正确方法。始终为它们使用完整路径。 @RakeshRajan 就像 anub 说的那样,您的问题不再是 .htaccess 规则,您的问题是您在 html 上使用 css、js 和可能的图像的相对路径,例如 &lt;link rel="stylesheet" type="text/css" href="css/my.css"&gt;它应该是&lt;link rel="stylesheet" type="text/css" href="http://domain.com/css/my.css"&gt;,因为您使用的是相对路径,这将使浏览器假定它属于 URL 上最近的文件夹,因此在您的情况下,它假定文件夹 /movie/titanic/ 作为 css 文件夹,因此它为什么会失败.【参考方案3】:

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

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

您的重写规则将采用服务器上不存在的地址(毕竟,您实际上没有包含titanic 文件的/movie 目录),并对其进行翻译以实际为准

/movie.php?name=titanic

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

【讨论】:

我明白你已经告诉.. 如果一切正常,那么我怎样才能在 movie.php 页面上获得“泰坦尼克号”的价值。我必须从数据库中获取一些东西取决于这个值.. 如果你的重写规则工作正常,它只是$_GET['name']。将调用 PHP,就好像用户直接访问了 example.com/movie.php?name=titanic,但用户只会在他们的浏览器中看到 example.com/movie/titanic 您的重写规则要求在 url 的末尾存在 /,并且不允许在 url 中间出现 /,因此 /movietitanic/ 将匹配,但/movie/titanic 不会。 我不太明白马克。我是 php 新手,对 .htaccess 很陌生。但非常渴望学习和解决..

以上是关于如何使用 .htaccess 创建干净的 url的主要内容,如果未能解决你的问题,请参考以下文章

当我已经使用工作正常的文章时,如何在 htaccess 中为配置文件用户创建干净的 url

htaccess 用于 apache 未读取的干净 url?

启用干净的 URL (Drupal 7)

Drupal.htaccess用于启用干净的url';s

隐藏页面扩展(如 ***)

如何使用 .htaccess 创建友好的 URL?