1

我正在使用 ubuntu LAMP,我正在尝试使用 mod_rewrite 来转换 url,例如:

  • 站点/XXX 到站点/XXX.php 和
  • 站点/XXX-YYY 到站点/XXX.php?sub1=YYY

我使用了这个重写规则:

RewriteRule ^([a-zA-Z0-9]+)$ ./$1.php
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2

在我的 OSX 本地,它们工作正常,无论如何,当在 ubuntu 服务器上上传 .htaccess 时,调用 site/test 我无法访问 site/test.php 但我得到一个 404。Mod_rewrite 正在工作,实际上 404 页面是设置在相同的 .htaccess 中并且可以正常工作。在本地我在一个文件夹中使用它:localhost/myfolder/.... 而在远程我使用子域的根目录:app.sitename.com/....

有人能帮我吗?

这是完整的代码:

RewriteEngine On
RewriteRule ^altro&(.+)? ./altro.php?$1 [L,QSA,NC]
RewriteRule ^([a-zA-Z0-9]+)$ ./$1.php [L,QSA,NC]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2&sub2=$3
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2&sub2=$3&sub3=$4
RewriteRule ^([a-z]+)-([a-z]+)-([0-9]+)-([a-zA-Z0-9_]+).([a-zA-Z]+)$ ./server/php/files/$1/$2/$3/$4.$5

第一个指令有效!实际上 site/altro&code 打开 altro.php?code

4

2 回答 2

1

也许这有助于调试:

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

来源:如何调试 Apache mod_rewrite

(你不能把它放在 .htaccess 中。你必须把它放在 VirtualHost 配置中。)

于 2013-10-22T18:37:18.303 回答
0

你可以试试这个代码:

RewriteEngine On

RewriteRule ^([a-zA-Z0-9]+)/?$ $1.php [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)/?$ $1.php?sub1=$2 [L,QSA]

完整的 .htaccess 代码:

Options +FollowSymLinks -MultiViews

RewriteEngine On

RewriteRule ^altro&(.+) altro.php?$1 [L,QSA,NC]
RewriteRule ^([a-zA-Z0-9]+)$ $1.php [L]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ $1.php?sub1=$2 [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ $1.php?sub1=$2&sub2=$3 [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ $1.php?sub1=$2&sub2=$3&sub3=$4 [L,QSA]
RewriteRule ^([a-z]+)-([a-z]+)-([0-9]+)-([a-zA-Z0-9_]+).([a-zA-Z]+)$ server/php/files/$1/$2/$3/$4.$5 [L,QSA]
于 2013-10-22T18:37:32.947 回答