我有以下规则中,一个“我们家店面”重定向到一个不同的地方比其他“普通页”规则:
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=
因为剩下的(注册免费,约,链接,组合...等)工作正常,我不明白这一点。
任何人都可以帮我这个吗?
谢谢。
通用规则已被移至底部,与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]
符号“ - ”是正则表达式中一个特殊字符。 它定义了一个范围(AZ,A-9,等等)。
试图逃避它。
RewriteRule ^our\-stores$ /our-stores.php [L,NC]
我怀疑你有一个名为实际的文件(或者更可能的空目录) our-stores
。
这将触发RewriteCond %{REQUEST_FILENAME} !-d
,导致它无法改写。
然后,它会尝试从该目录加载默认页面(如的index.php),它不存在,所以它会尝试重写,导致?sub=our-stores&second=
添加paramters。