2

我正在重定向这种类型的 url

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]

IE

这种类型的 url 应用了 css 和 javascript。

http://www.site.com/windows/games

但是这种类型的 url 没有应用 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/

请查看并建议任何可能的方法。

谢谢。

4

2 回答 2

1

这里的问题是,当您添加尾部斜杠时,您的相对路径会中断,因为它引入了两级目录结构,而 CSS/JS 文件路径仅出现一次..。因此,在RewriteRule/windows/global/js/js.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(当然)保持不变。

于 2013-09-05T12:55:04.290 回答
0

我在 .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]

您将不得不根据您的情况进行更改。我没有对此进行测试,但我希望它足以让你到达你想要的地方。

于 2013-09-05T12:18:15.503 回答