htaccess RewriteRule缩短URL

时间:2014-09-20 23:44:23

标签: php apache .htaccess mod-rewrite

我想找到一个RewriteRule来做到这一点:

mysite.net/jqMAS/mysite.net/jqMAS => mysite.net/index.php?id=jqMAS

我使用了这样的.htaccess文件:

RewriteEngine On
RewriteRule ^(.*) index.php?id=$1

但不幸的是,它没有用(可能 mysite.net/index.php 本身被重定向到 mysite.net/index.php?index.php 等等?):调用mysite.net/jqMAS会产生500 Internal Server Error

我们应该使用哪些RewriteRule进行此类网址缩短?


以下是index.php页面(我没有提到标题)的内容:

  <body>
  Bonjour <?php echo $_GET['id']; ?>
  </body>

3 个答案:

答案 0 :(得分:1)

请尝试以下.htaccess文件,因为它是在我自己的网站上成功使用的设置。

# Enable the rewriting engine.
RewriteEngine On

# Change requests for a shorter URL
# Requires one or more characters to follow the domain name to be redirected
RewriteRule     ^([A-Za-z0-9-]+)/?$     index.php?id=$1             [L] 

答案 1 :(得分:1)

您需要RewriteCond来停止重写真实文件和目录:

RewriteEngine On

# if request is not for a directory
RewriteCond %{REQUEST_FILENAME} !-d
# if request is not for a file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?id=$1 [L,QSA]

答案 2 :(得分:1)

有2个htaccess文件: 将htaccess文件保存在应用程序文件夹中: 拒绝所有人。

将以下代码粘贴到应用程序文件夹外的htaccess文件中:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

这对我来说很完美。