我有這樣的代碼,所有.PHP重定向到沒有擴展名:隱藏擴展名和擴展名爲重定向URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)/$ $1.php
所以/example.php = /例如
我想它,所以如果有人點擊在/example.php上它們會自動以/ example結尾。
什麼是最好的方式去呢?將這兩個鏈接的工作視爲重複的內容?
我有這樣的代碼,所有.PHP重定向到沒有擴展名:隱藏擴展名和擴展名爲重定向URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)/$ $1.php
所以/example.php = /例如
我想它,所以如果有人點擊在/example.php上它們會自動以/ example結尾。
什麼是最好的方式去呢?將這兩個鏈接的工作視爲重複的內容?
試試這個:
RewriteEngine On
# if requested .php file directly, then redirect to extension-less URL
# (do it on initial rewrite iteration only)
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php$ /$1 [R=301,L]
# Your "add .php file extension" rule goes below
這種方法的問題是,%{ENV:REDIRECT_STATUS}
變量可能不被填充/由Apache的安裝/配置支持。不幸的是,我不知道需要做些什麼才能使其工作。
如果上述方法無效,請嘗試以下解決方法 - 它會工作但不是說「好」,並在某些情況下可能會失敗(查詢字符串值是這裏的薄弱點):
RewriteEngine On
# if requested .php file directly, then redirect to extension-less URL
# (do it on initial rewrite iteration only)
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP/.+
RewriteRule ^(.+)\.php$ /$1 [R=301,L]
# Your "add .php file extension" rule goes below
在這條規則重寫條件是很重要的 - 沒有它,你就會有無窮的重定向循環,你的瀏覽器會在某個時刻中止(除非它是不夠聰明(或請求是由一些編碼不機器人完成)並且這樣的過程必須被殺死全線)。
把這樣的重定向規則放在「添加.php文件擴展名」規則的上面或下面並不重要 - 我只是希望保持所有301重定向接近頂端。
@checkenginelight所以..這個規則是否適合你? – LazyOne
是的第二個似乎工作非常感謝! – checkenginelight
您可以執行301「永久移動」重定向,通知客戶端請求的資源已移動並在新位置可用。要做到這一點使用RewriteRule
,添加[R=301,L]
標誌的規則規範,例如:
RewriteRule ^(.*)/$ $1.php [R=301,L]
這被認爲是「搜索引擎友好的」重定向方法。
當我將它添加到我的代碼中時,我可以訪問我的/example.php頁面,但不會訪問/ example頁面,因爲它會像這樣重定向到somethign:http://www.domain1.com/home/username/domains/domain1。 com/public_html/example.php我想要它,當我嘗試點擊/example.php它會自動帶我到/例如 – checkenginelight
然後,你需要寫規則的另一種方式:'RewriteRule(。*)。php $/$ 1 [R = 301,L]' –
這種重定向有什麼意義? –
[Redirect * .php to clean URL](http://stackoverflow.com/q/2267488/)的可能重複,[在url mod_rewrite中隱藏擴展名.php](http://stackoverflow.com/q/6241408/ ) – outis