【问题标题】:Url rewrite with regular expression not working使用正则表达式重写 URL 不起作用
【发布时间】:2016-09-02 10:30:59
【问题描述】:

我的/etc/apache2/apache2.conf 文件中有这个RewriteRule 代码。

<Directory /var/www/html/demo/>
    # New URL Structure
    RewriteEngine On
    Allow From All
    RewriteBase /

    RewriteRule "^page/(([A-Za-z0-9\-]+/)*[A-Za-z0-9\-]+)/(.*)$" detail.php?url=$1 [L]
</Directory>

我有这个 URL:http://example.com/page/parameter-1/parameter-2 并且 RewriteRule 运行良好,但是当我尝试使用这个 URL http://example.com/page/parameter-1 时它不起作用。

http://example.com/page/parameter-1 [Not working]
http://example.com/page/parameter-1/parameter-2 [Working]
http://example.com/page/parameter-1/parameter-2/parameter-3 [Working]

知道我做错了什么吗?

谢谢。

【问题讨论】:

    标签: php linux apache .htaccess mod-rewrite


    【解决方案1】:

    这是因为您的正则表达式模式总是假设/ 总是在page/ 之后。

    您可以将其简化为:

    <Directory /var/www/html/demo/>
        # New URL Structure
        RewriteEngine On
        Allow From All
        RewriteBase /
    
        RewriteRule ^/?page/([a-z].*)$ detail.php?url=$1 [L,QSA,NC]
    
    </Directory>
    

    【讨论】:

    • 如果我不想在第一个参数上允许数字怎么办。不想允许 1245:http://example.com/page/1245/parameter-1 并允许:http://example.com/page/parameter-1/parameter-2
    • 在这种情况下使用:RewriteRule ^/?page/([a-zA-Z]+-\d+.*)$ detail.php?url=$1 [L,QSA,NC]
    • 我尝试过使用RewriteRule "^/?page/([a-zA-Z]+-\d+.*)$" detail.php?url=$1 [L,QSA,NC],但这个网址不起作用http://example.com/page/parameter-1 OR http://example.com/page/parameter-1/parameter-2 OR http://example.com/page/parameter-1/parameter-2/parameter-3
    • 我建议的规则适用于我的 apache 上的 http://localhost/page/parameter-1/parameter-2http://localhost/page/parameter-1/parameter-2/param-3。你还有其他规则吗?
    • 现在我明白了。你能检查一下这个网址吗:example.com/page/one-1/two-2 可以,但example.com/page/one/two 不行。
    【解决方案2】:

    好的,让我们分解一下您的正则表达式匹配的内容:

    ^page/ - 您的 URL 必须以“page/”开头,到目前为止一切正常。

    (([A-Za-z0-9\-]+/)* - 您的 URL 可以包含 0 个或多个段。

    [A-Za-z0-9\-]+)/(.*)$ - 您的 URL 必须以某个段结尾,后跟一个斜杠,然后是任何内容

    最后一部分是正则表达式出错的地方。您的第一个示例在“page/”之后没有斜杠。

    【讨论】:

      猜你喜欢
      • 2015-05-07
      • 1970-01-01
      • 2011-09-03
      • 2023-04-09
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多