1

我想从扩展 URL 重定向到无扩展 URL。例如,/contact 应该读取 /contact.php 的内容。我使用以下规则来实现这一点:

RewriteEngine On

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

有一个名为 test.php 的文件,其中有一个名为“id”的变量。我想将读取请求从 /test/1 重定向到 test.php?id=1

我使用以下方法来实现这一点:

RewriteRule ^test/([0-9]+)/?$            /test?id=$1      

出于某种原因,调用 test/1 文件会导致 500 内部服务器错误。如果我删除规则以隐藏 php 扩展,它会再次起作用

另外,如何强制对带有扩展名的 URL 进行永久重定向?例如,如果有人联系到 /contact.php 应该被重定向到 /contact

谢谢

4

2 回答 2

1

您可以使用以下代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# your existing rule (fixed)
RewriteRule ^test/([0-9]+)/?$ /test.php?id=$1 [L,NC,QSA]

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]

## To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ /$1.php [L]
于 2013-03-22T20:44:16.937 回答
0

这是在我的htaccess ...一定要mod_rewrite在Apache中打开...

RewriteEngine On
# Redirect .php requests to url without an extension
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L]
RewriteRule ^([^/.]+)$ $1.php [L]
# This will remove the trailing slash unless it's a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L]
于 2013-03-22T20:46:42.963 回答