我正在重定向此类网址
http://www.site.com/windows/games/ or http://www.site.com/windows/games
http://www.site.com/windows/software/ or http://www.site.com/windows/software
到
http://www.site.com/windows/ct.php?ct=games
http://www.site.com/windows/ct.php?ct=software
网站结构
wamp/www/Site/windows/ct.php
我正在尝试这种方式正确地重定向,但是当url在结尾处重写斜杠时,它也会重写css,js文件。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^windows/([^/]*)/?$ /Site/windows/ct.php?ct=$1 [L]
即
这种类型的网址已经应用了css和javascript。
http://www.site.com/windows/games
但是这种类型的网址没有应用css和javascript。 (不使用尾部斜杠)。
http://www.site.com/windows/games/
我尝试了几种语法,如
RewriteRule ^windows/([^/]+)/?$ /windows/ct.php?ct=$1 [L]
RewriteRule ^windows/(^(.[^/]*)/?)$ /windows/ct.php?ct=$1 [L]
RewriteRule ^windows/([^/]*)/? /windows/ct.php?ct=$1 [L]
RewriteRule ^windows/([^/]+)/? /windows/ct.php?ct=$1 [L]
但它不起作用。
完成.htaccess
Options +FollowSymlinks -MultiViews
RewriteEngine on
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^windows/([^/]*)/?$ /Site/windows/ct.php?ct=$1 [L]
RewriteRule ^[^/]*/[^/]*/(.*\.html) /Site/error/400/ [L]
RewriteRule ^(error) - [L]
RewriteRule ^sitemap\.xml$ sitemap.php [L]
RewriteRule ^rss/(.*?)\.xml$ rss/$1.php [L]
</IfModule>
ErrorDocument 404 /Site/error/404/
请参阅并建议任何可行的方法。
感谢。
答案 0 :(得分:2)
这里的问题是,当你添加一个尾部斜杠时你的相对路径会中断,因为它引入了两级目录结构,而CSS / JS文件路径只出现..
一次。因此,在为RewriteRule
之类的路径解析404时,您的/windows/global/js/js.js
实际上也会触发CSS / JS文件。但是,脚本仍然无法正常工作,因为它们不在/Site
下,而且这是您的规则从中提供请求的地方。
因此,在不触及相对URL或资源位置的情况下修复问题;添加另一条规则如下:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^windows/([^/]*)/?$ /Site/windows/ct.php?ct=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^windows/(global/.*)$ /$1 [L] # handles css|js files
.htaccess
的其余部分(当然)保持不变。
答案 1 :(得分:1)
我在.htaccess中使用以下规则,但这可能过于笼统:
RewriteRule ^q/([^/]+)/([^/]+)(\/?)$ /path/to/q.php?type=$1&q=$2&{QUERY_STRING} [NC]
这对你来说可能更好:
RewriteRule ^windows(\/?)$ /path/to/windows.php?{QUERY_STRING} [NC]
RewriteRule ^windows/([^/]+)(\/?)$ /path/to/windows.php?type=$1&{QUERY_STRING} [NC]
您必须根据自己的情况进行更改。我没有对此进行过测试,但我希望它足以让你到达你想要的地方。