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]

すなわち

このタイプの 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 ファイル パスが 1 回しか表示されないのに対し、末尾にスラッシュを追加すると 2 レベルのディレクトリ構造が導入されるため、相対パスが壊れることです..。したがって、RewriteRule実際には、のようなパスの 404 を解決するときに、CSS/JS ファイルに対しても発火しています/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 に答える