如何使用 .htaccess 创建干净的 url
Posted
技术标签:
【中文标题】如何使用 .htaccess 创建干净的 url【英文标题】:How to create clean url using .htaccess 【发布时间】:2013-09-22 00:26:17 【问题描述】:这是我的 .htaaccess 代码。
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 和可能的图像的相对路径,例如 <link rel="stylesheet" type="text/css" href="css/my.css">
它应该是<link rel="stylesheet" type="text/css" href="http://domain.com/css/my.css">
,因为您使用的是相对路径,这将使浏览器假定它属于 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