我在重寫url時遇到問題。我爲自己編寫了一個小框架,因爲我不需要爲我的項目提供大量框架的全尺寸框架。我這樣定義Zend框架的一般行爲:[mod_rewrite]:與重定向有關的問題
重寫後的URL:域/控制器/動作
真實路徑:域/ index.php文件CTRL =控制器& ACT =動作
控制器和動作應顯示而不是$ _GET命名鍵。控制器和動作後,如果我添加了無限額外的參數,它應該被添加爲像這樣的鍵/值:
domain/controller/action/key/value/key2/value2/key3/value3 ...
這是我的.htaccess:
RewriteEngine On
RewriteBase/
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act=$2&$3=$4&$5=$6&$7=$8&$9=$10&$11=$12&$13=$14 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act=$2&$3=$4&$5=$6&$7=$8&$9=$10&$11=$12 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act=$2&$3=$4&$5=$6&$7=$8&$9=$10 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act=$2&$3=$4&$5=$6&$7=$8 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act2=$2&$3=$4&$5=$6 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act=$2&$3=$4 [L]
RewriteRule ^([\w-]+)+/([\w-]+)?$ index.php?ctrl=$1&act=$2 [L]
RewriteRule ^([\w-]+)+/?$ index.php?ctrl=$1 [L]
網頁只能調用控制器和動作。如果其中一個丟失,用戶將被重定向。我爲此設置標題:
// Redirects
if (!isset($_GET) || !isset($_GET['ctrl'])) {
header('location: /index/index/');
}
if (!isset($_GET['act']) || (isset($_GET['act']) && empty($_GET['act']))) {
header("location: /".$_GET['ctrl']."/index/");
}
這很髒我知道。通常它的工作原理,但也有我解決不了的一些問題:
,如果我嘗試撥打同域的webapp /頁面無法顯示不然我會被重定向與搜索到谷歌「域/」。如果我鍵入域/控制器/行動它的作品。
如果我在動作之後添加了一個斜線,它將以404結束。它應該與在末尾沒有斜線相同的行爲。如果我在標題路徑前添加一個斜槓('位置:...它適用於以下模式:域/控制器,它將被重定向到域/控制器/操作(在這種情況下,控制器/索引)
但如果我嘗試域/它之前導致404
無斜線:
域/控制器/域/控制器/控制器/行動,但結果域/會正確地重定向到域/索引/索引
我在想什麼? :(
感謝
酪氨酸
哎,請解析URL中的PHP代碼,並簡單地將所有請求轉發到您的PHP文件,而不是使用這樣醜陋的URL ......此外,簡單地映射querystring params包括將他們的名字寫入路徑段不會給你很乾淨的URL ...... – ThiefMaster 2014-09-22 12:41:51
我不知道你的意思是「不是很乾淨」的網址,但是「domain/user/edit/id/3」對我來說很乾淨 – Tyr 2014-09-23 22:50:12
以這個問題的網址爲例。 'http:// stackoverflow.com/questions/25974343/mod-rewrite-problems-with-redirecting'很好,但是在你的系統中它會是例如'http:// stackoverflow.com/questions/id/25974343/title/mod-rewrite-problems-with-redirecting' – ThiefMaster 2014-09-23 22:51:18