使用mod_rewrite清理URL,包括域

时间:2016-02-08 19:00:03

标签: apache .htaccess mod-rewrite

我正在mod-rewrite中使用.htaccess来实现干净/漂亮的网址。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ details.php?id=$1 [L,QSA]
  • RewriteEngine On启动引擎。

  • 如果是的话,
  • RewriteCond %{REQUEST_FILENAME} !-f不会重写任何内容 请求文件名存在,并且是一个文件。

  • 如果是的话,
  • RewriteCond %{REQUEST_FILENAME} !-d不会重写任何内容 请求文件名存在,并且是一个目录。

  • RewriteRule ^([^/]+)/?$ details.php?id=$1 [L,QSA]这是实际的 重写规则。域名之后需要任何东西(任何东西 除了正斜杠之外),并将其重写为details.php,传递 它作为id参数。

RewriteRule ^([^/]+)/?$ details.php?id=$1 [L,QSA] http://www.domain.com/texas

请求时正常工作

这很好。 我需要的是我的请求网址如下所示: 的 http://www.domain.com/location/texas

details.php具有以下代码

<?php
$id = $_GET["id"];
echo "new id is ".$id;
?>

问题:我无法写出有效的.htaccess RewriteRule来识别此请求http://www.domain.com/location/texas。 请帮忙。

我尝试了什么?

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^location/?$ details.php?id=$1 [L,QSA] - 无法正常工作

RewriteRule ^location/[a-z][-a-z0-9]*?$ details.php?id=$1 [L,QSA] - 正常工作,但id显示为空白。

1 个答案:

答案 0 :(得分:1)

您可以通过启动location/可选项来调整现有规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?:location/)?([^/]+)/?$ details.php?id=$1 [NC,L,QSA]