iT邦幫忙

0

htaccess 排除目錄

請教一下各位前輩
目前網站的目錄是長這樣

我想排除掉adm、css、img資料夾及index.php

htaccess目前的寫法是
但是無法運作

RewriteCond $1 !^(index\.php|img|css|adm)

想請問如何達成目錄的排除
謝謝

RewriteCond 是重寫耶,這表示這些頁面要重新寫入到主機
應該用 IndexIgnore 來跳過這些檔案吧

2 個回答

2
weiclin
iT邦高手 4 級 ‧ 2015-08-07 21:25:23
最佳解答

其實上次就有提到了
如果要排除的檔案太多, 試試看用檔案是否存在當條件

<pre class="c" name="code">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?cat1=$1

還有你貼的那一行, $1 是什麼東西得要看你其它地方怎樣寫
光貼一行沒辦法知道的

catding iT邦新手 5 級 ‧ 2015-08-08 00:30:11 檢舉

目前使用

<pre class="c" name="code">RewriteEngine On  
RewriteRule ^css($|/) - [L,NC] 
RewriteCond $1 !^(index\.php|img|adm)  
RewriteRule ^([^/]*)$ index.php?cat1=$1
RewriteRule ^([^/]*)/([^/]*)$ index.php?cat1=$1&cat2=$2
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?cat1=$1&cat2=$2&cat3=$3
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?cat1=$1&cat2=$2&cat3=$3&cat4=$4
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?cat1=$1&cat2=$2&cat3=$3&cat4=$4&cat5=$5

發現adm/adm.php會像其他要rest的一樣被拆成adm和adm.php

使用

<pre class="c" name="code">
RewriteEngine On  
RewriteCond %{REQUEST_FILENAME} !-f   
RewriteRule ^([^/]*)$ index.php?cat1=$1
RewriteRule ^([^/]*)/([^/]*)$ index.php?cat1=$1&cat2=$2
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?cat1=$1&cat2=$2&cat3=$3
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?cat1=$1&cat2=$2&cat3=$3&cat4=$4
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?cat1=$1&cat2=$2&cat3=$3&cat4=$4&cat5=$5

則會導致連index.php和css都沒排除到

weiclin iT邦高手 4 級 ‧ 2015-08-08 01:05:33 檢舉

看到你這一大串...我有個建議
這是以前在 zend framework 看到的作法, 基本原理跟我提的一樣, 只是更完整些
.htaccess:

<pre class="c" name="code">
RewriteEngine On

# pass exists file
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

# rewrite all others to index.php
RewriteRule ^.*$ index.php [NC,L]

然後在 php 裡面這樣取得變數

<pre class="c" name="code">
<?php

$cat = array_map(urldecode, split("/", $_SERVER["REQUEST_URI"]));
echo "cat1 = {$cat[1]}<br>";
echo "cat2 = {$cat[2]}<br>";
echo "cat3 = {$cat[3]}<br>";
weiclin iT邦高手 4 級 ‧ 2015-08-08 01:40:42 檢舉

另外你的寫法, 似乎是搞錯 RewriteCond 的運作方式了
RewriteCond 只會作用在下面的"一條" RewriteRule
而不會作用在下面"所有的" RewriteRule

0
Old Siao
iT邦研究生 1 級 ‧ 2015-08-07 16:44:16

隨手GOOGLE了一下,找到這個,看看行不行
http://bbs.phpchina.com/thread-182777-1-1.html

我要發表回答

立即登入回答