为什么如果我把一个“ - ”破折号在我的htaccess的规则不起作用?(Why if I put

2019-07-18 08:30发布

我有以下规则中,一个“我们家店面”重定向到一个不同的地方比其他“普通页”规则:


    Options +FollowSymlinks
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RedirectMatch 302 /construction.html http://www.{website}.com/construction-services
    RedirectMatch 302 /construction/endless-pools.html http://www.{website}.com/construction-services/endless-pools

    # PRODUCT AND SERVICES
    RewriteCond %{REQUEST_URI} !\.html$
    RewriteRule ^(.*)/(.*)$ /rewrite.php?sub=$1&second=$2 [NC]

    # PLAIN PAGES
    #RewriteRule ^/$ /index.php [L,NC]
    RewriteRule ^signup-free$ /signup-free.php [L,NC]
    RewriteRule ^about$ /content.php?page=1 [L,NC]
    RewriteRule ^links$ /content.php?page=2 [L,NC]
    RewriteRule ^portfolio$ /portfolio.php [L,NC]
    RewriteRule ^our-stores$ /our-stores.php [L,NC]
    RewriteRule ^contact$ /contact.php [L,NC]
    RewriteRule ^products-list$ /lists.php?action=products [L,NC]
    RewriteRule ^services-list$ /lists.php?action=services [L,NC]

当我输入/our-stores的Apache重定向到: /our-stores/?sub=our-stores&second=

因为剩下的(注册免费,约,链接,组合...等)工作正常,我不明白这一点。

任何人都可以帮我这个吗?

谢谢。

Answer 1:

通用规则已被移至底部,与REQUEST_FILENAME条件移动的静态重定向下方。 此外,我已经添加了/? 在每个特定的重定向匹配可选尾随斜线。 最后,通用规则是改善不使用.* ,而是一切都匹配,以第一/在贪心不足的方式。 然后,它使用.+/以确保至少一个字符的情况下。 因此有斜线的网址将不匹配的。 如果您有没有一些仿制药second= ,改回.*

所有这些在htaccess的测试仪正常工作。

RedirectMatch 302 /construction.html http://www.{website}.com/construction-services
RedirectMatch 302 /construction/endless-pools.html http://www.{website}.com/construction-services/endless-pools

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^signup-free/?$ /signup-free.php [L,NC]
RewriteRule ^about/?$ /content.php?page=1 [L,NC]
RewriteRule ^links/?$ /content.php?page=2 [L,NC]
RewriteRule ^portfolio/?$ /portfolio.php [L,NC]
RewriteRule ^our-stores/?$ /our-stores.php [L,NC]
RewriteRule ^contact/?$ /contact.php [L,NC]
RewriteRule ^products-list/?$ /lists.php?action=products [L,NC]
RewriteRule ^services-list/?$ /lists.php?action=services [L,NC]

# PRODUCT AND SERVICES
RewriteCond %{REQUEST_URI} !\.html$
RewriteRule ^([^/]+)/(.+)$ /rewrite.php?sub=$1&second=$2 [NC]


Answer 2:

符号“ - ”是正则表达式中一个特殊字符。 它定义了一个范围(AZ,A-9,等等)。

试图逃避它。

RewriteRule ^our\-stores$ /our-stores.php [L,NC]


Answer 3:

我怀疑你有一个名为实际的文件(或者更可能的空目录) our-stores

这将触发RewriteCond %{REQUEST_FILENAME} !-d ,导致它无法改写。

然后,它会尝试从该目录加载默认页面(如的index.php),它不存在,所以它会尝试重写,导致?sub=our-stores&second=添加paramters。



文章来源: Why if I put a “-” dash in a rule in my htaccess doesn't work?