【发布时间】:2012-04-04 11:58:39
【问题描述】:
这是我的 htaccess 的样子:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.site.com$ [NC]
RewriteRule .? http://site.com%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_URI} /page1/([^?].*)$ [NC]
RewriteRule /page1/(.*)$ /page1/?$1 [L] # change /page1/stuff to /page1/?stuff
# End rewriting for page1
RewriteCond %{REQUEST_URI} /page2/([^?].*)$ [NC]
RewriteRule /page2/(.*)$ /page2/?$1
# End rewriting for page2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.php\ HTTP/
RewriteRule ^(([^/]+/)*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,NS,L]
Options -Indexes
我还想要的是,如果用户转到site.com/page1/stuff 或site.com/page1/stuff/more,它将在地址栏中添加一个斜杠并将其更改为site.com/page1/stuff/ 和site.com/page1/stuff/more/,但我没有尝试过.有什么方法可以做到这一点而不会导致重定向循环?
我希望我的所有网址都有一个尾部斜杠,并且我看到目录已经这样做了。
编辑:澄清一下,我希望用户可以看到尾随斜杠,而不是 ?
【问题讨论】:
-
你可以在
/$1后面加一个斜杠=>/$1/ -
@ShaktiSingh: a) 这些更改不会发生在地址栏中(即用户永远不会在 url 中看到
?)和 b) 如果查询字符串以 @987654330 结尾@然后我不想要另一个了。 -
RewriteCond %{REQUEST_URI} /page2/([^?].*)$将不匹配/page2/?stuff(因为在这种情况下 %{REQUEST_URI} 将 =/page2/)。要匹配 QUERY STRING,您必须使用RewriteCond %{QUERY_STRING} PATTERN_HERE- 查询字符串(在此特定示例中)将只是stuff。 -
@LazyOne:我试过了,即使它在服务器端更改了它,用户仍然看不到尾部斜杠,请参阅编辑
-
@qwertymk 试试这个:
RewriteRule ^page1/(.*[^/])$ /page1/$1/ [L,R=301]。将 R 代码(重定向/结果代码)更改为您需要的任何内容:301 = 永久重定向,302 = 临时重定向。我建议从 302 开始,并在测试完成后更改为 301(因为现代浏览器会缓存重定向,这可能会导致测试/调试时受挫)。