2014-10-18 190 views
0

我試圖爲我的網站設置自定義重寫方案(http://panchr.me)。htaccess - 重寫參數路徑

這裏是我的.htaccess

RewriteEngine on 
ErrorDocument 404 /404.php 

RewriteCond %{REQUEST_URI} !-f 
RewriteCond %{REQUEST_URI} repositories 
RewriteRule ^(.+)repositories(.+) $1repositories?repo=$2 [nocase,last] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^([^\.]+)$ $1.php [nocase,last] 

具體來說,我要重寫一些諸如http://panchr.me/repositories/some_namehttp://panchr.me/repositories?repo=some_name。但是,如果我訪問此頁面,則會出現404錯誤。此外,剛剛訪問http://panchr.me/repositories現在給了我一個500錯誤。

我該如何解決這個問題?

我的服務器結構如下:

.htaccess 
# a few other files, not available to user 
public_html/ # this is the DocumentRoot 
    index.php 
    repositories.php 
    # more files 

回答

2

你的條件和規則是沒有意義的,這應該工作:

RewriteEngine On 
RewriteBase/
ErrorDocument 404 /404.php 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(repositories)(\.php)?/([^/]+)$ $1.php?repo=$3 [NC,L] 
# alternatively to the above RerwriteRule you could try 
# (comment the above RewriteRule if u do and leave the conditions uncommented) 
#RewriteRule ^(repositories)(?:\.php|)/([^/]+)$ $1.php?repo=$3 [NC,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

它幾乎說,如果文件或文件夾不存在2條件:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

然後RewriteRule說,重定向anyt hing即repositories/anything,例如:

http://panchr.me/repositories/moduleA 
http://panchr.me/repositories/other 
http://panchr.me/repositories/some_name 
+0

是否可以(可選)匹配'repositories.php/some_name'?我試圖將RewriteRule作爲'RewriteRule ^([^ \。] +)(repositories)(?:\。php)?/([^ /] +)$ $ 1 $ 2.php?repo = $ 3 [NC,L]' ,但這並不能作爲一個論據。 (我不得不使用'([^ \。] +)',因爲我不能設置RewriteBase而不會搞亂另一個規則)。 – 2014-10-19 02:26:00

+0

@RushyPanchal那麼'儲存庫'究竟在哪裏?也許如果你告訴我更多關於你的結構,我可以給你一個更好的答案。 '([^ \。] +)'匹配任何不是點的,你期望匹配什麼,會出現在'repositories'之前? **如果存在其他規則,使用'RewriteBase'弄亂了底層規則,將文件夾重定向到它們各自的'php' ** – Prix 2014-10-19 02:40:59

+0

我更新了我的原始問題與服務器結構。基本上,'.htaccess'位於'repositories.php'的_parent目錄中。我的答案是「(?:\。php)?',它應該是'.php'的可選匹配項。我想重寫能夠做到這一點: 'panchr.me/repositories/test' - >'panchr.me/repositories.php?repo = test'(這個工程已經) 'panchr.me/repositories。 php/test' - >'panchr.me/repositories.php?repo = test'(這不起作用)。 – 2014-10-19 02:52:21