4

我有以下规则,一个“我们的商店”重定向到与其他“PLAIN PAGES”规则不同的地方:


    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-storesapache 重定向到:/our-stores/?sub=our-stores&second=

我不明白,因为其余的(免注册、关于、链接、投资组合......等等)工作正常。

有人可以帮我解决这个问题吗?

谢谢你。

4

3 回答 3

2

通用规则已移至底部,REQUEST_FILENAME条件移至静态重定向下方。此外,我添加了 a/?以匹配每个特定重定向上的可选尾部斜杠。最后,通用规则被改进为不使用.*,而是以/不那么贪婪的方式将所有内容匹配到第一个。然后它.+在之后使用/以确保至少存在一个字符。因此,带有斜杠的 URL 将不匹配它。如果您有一些没有 的泛型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]
于 2013-01-17T14:19:12.193 回答
0

我怀疑您有一个名为our-stores.

这将触发RewriteCond %{REQUEST_FILENAME} !-d,导致它不重写。

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

于 2013-01-17T13:15:21.770 回答
0

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

试着逃避它。

RewriteRule ^our\-stores$ /our-stores.php [L,NC]
于 2013-01-17T13:11:24.247 回答