【问题标题】:.htaccess RewriteRule conditionals?.htaccess RewriteRule 条件?
【发布时间】:2014-12-18 00:38:18
【问题描述】:

我正在尝试创建两个 RewriteRules,但似乎无法让 mod_rewrite 发挥得很好。

我想要实现的是以下...

domain.com/my/friendly/url = domain.com/index.php?a=$1

这个很简单,但我正在尝试检查是否存在一个数字(任意长度),然后添加为第二个请求参数。

例如

domain.com/my/friendly/url/100 = domain.com/index.php?a=$1&id=$2

其中$1my/friendly/url$2100

我尝试了许多模式,但都没有成功。我的.htaccess 文件看起来像这样并且失败了。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)(\/[0-9]+)$ index.php?a=$1&id=$2 [L,QSA]
RewriteRule ^(.*)$ index.php?a=$1 [L,QSA]

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite redirect


    【解决方案1】:

    你可以有这样的规则:

    # ignore all rules for real files or directories
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    
    RewriteRule ^(.+?)/([0-9]+)/?$ index.php?a=$1&id=$2 [L,QSA]
    
    RewriteRule ^(.+)$ index.php?a=$1 [L,QSA]
    

    【讨论】:

    • 工作愉快!非常感谢!
    • 我注意到 2 RewriteCond 破坏了整个代码,但我想了解为什么,因为这些 RewriteRule 是正确的?
    • 1.主要问题是 OP 的第一个 RewriteRule 中使用的正则表达式。 2.RewriteCond只适用于下一个RewriteRule而不是所有RewriteRule
    • 我现在看到了第一个 RewriteRule 的问题。分隔/?之间没有区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多