【问题标题】:Clean URL with mod_rewrite including sub directory inside domain使用 mod_rewrite 清理 URL,包括域内的子目录
【发布时间】:2016-02-08 19:00:03
【问题描述】:

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

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

时工作

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

details.php 有以下代码

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

问题:我无法编写有效的.htaccessRewriteRule 来识别此请求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 显示为空白。

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!,它的工作!现在让我理解你的代码。给我2分钟,我接受
    • 我如何将 location 设为可选,而不是将其设为强制性?
    • RewriteRule ^location/([^/]+)/?$ details.php?id=$1 [NC,L,QSA]
    • 酷,我也在尝试。非常感谢你。我在SO附近见过你。今天得到了你的直接帮助:)
    猜你喜欢
    • 2013-08-20
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多