它位於同一文件夾中的index.php
因此,考慮到.htaccess
文件位於/rewritetest/.htaccess
(相對於文檔根即/.htaccess
)然後...
RewriteRule ^/?([-a-zA-Z0-9_+]+)$ index.php?id=$1 [L]
如果您請求的形式/rewritetest/index/12
的URL,然後上面的RewriteRule
模式實際上不會匹配任何東西。它試圖匹配「索引/ 12」,但你的模式不包含斜線,所以會失敗。 (是字符類中的+
故意的嗎?)
試着這麼做,而不是執行以下操作:在URL
RewriteRule ^(index)/(\d+)$ $1.php?id=$2 [L]
這顯然符合具體「指標」。如果你總是改寫爲index.php
,那麼你不需要在URL中「索引」 - 除非這意味着不同的東西?這也假設id
參數的值僅包含數字。
要重寫更一般的.../<controller>/26
到.../<controller>.php?id=26
(如前所述評論),那麼你可以試試:
RewriteRule ^([\w-]+)/(\d+)$ $1.php?id=$2 [L]
在每個目錄.htaccess
文件斜線前綴省略由匹配的URL路徑上RewriteRule
模式,所以不需要/?
。以上模式也匹配東西爲id
,而不是任何東西。所以,/index/
不匹配。
如果這是一個新的網站,然後在「重定向」(從/index.php?id=12
回/index/12
)不一定需要。如果您要更改現有網站上的舊網址已具有入站鏈接並被搜索引擎編入索引的網址,那麼這才真正需要。在這種情況下你可以不喜歡以下前的內部重寫:
RewriteBase /rewritetest/
RewriteRule %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^id=(\d+)
RewriteRule ^(index)\.php$ $1/%1 [R,L]
或者,(如上所述)更通用.../<controller>/26
到.../<controller>.php?id=26
然後更改RewriteRule
到:
RewriteRule ^([\w-]+)\.php$ $1/%1 [R,L]
針對REDIRECT_STATUS
環境變量的附加檢查是爲了在之前將URL重寫爲/index.php?id=12
之後防止重寫循環。
你的'.htaccess'文件位於哪裏? – MrWhite
對不起,它位於與index.php相同的文件夾中。並且它是服務器上唯一的htaccess,並且在服務器端沒有配置任何東西 – DavidLar
它總是應該重寫爲index.php(如代碼所示),還是應該重定向到URL中指定的任何基本名稱(因爲您的URL建議)?例如。 '..../foo/26'到'..../foo.php?id = 26'? – MrWhite