-1

我正在做一个 URL-Shortener,我试图让它对 URL 友好。目前我的地址是这样输入的“example.com/index.php?name=sitename”我希望它像“example.com/sitename” “..我想我可以使用一些很酷的重写规则,但我无法让它工作..

我做了这样的事情,但它不会工作

Options All -Indexes
DirectoryIndex index.php index.html index.htm
RewriteEngine On
RewriteRule ^([^/]*)/$ /index.php?name=$1 [L]

但我不知道:s?

4

3 回答 3

2

这是您需要放入的代码DOCUMENT_ROOT/.htaccess

Options All +FollowSymLinks -MultiViews -Indexes
DirectoryIndex index.php index.html index.htm
RewriteEngine On

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?name=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=301,L]

# internal forward from pretty URL to actual one
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /index.php?name=$1 [L,QSA]

参考:Apache mod_rewrite 简介

于 2013-10-16T09:30:06.057 回答
1

/您的正则表达式将在域后包含多个 URL 的 URL 上失败,因为[^/]它一看到这些字符之一就会停止,然后它会查找带有 的最后一个斜杠/$,但情况并非总是如此。

假设您要转换这些 URL

example.com/HiThere
example.com/Your/Page

至:

example.com/index.php?name=HiThere
example.com/index.php?name=Your/Page

试试这个重写规则:

RewriteRule ^(.*?)/$ /index.php?name=$1 [L]

这将查找所有字符,(.*?)直到它到达最后一个/。不过,我对[L]国旗不是 100% 确定的。

于 2013-10-16T09:24:35.963 回答
0

最简单的方法是使用 404 错误指向 index.php 然后获取sitenameusing php .htaccess 文件

ErrorDocument 404 /index.php

PHP代码

<?php 
$sitename=substr(strrchr($_SERVER["REQUEST_URI"],"/"),"1");

现在只需访问“example.com/sitename”,站点名称将存储在$sitename.

if($sitename==""){//Show your HomePage}

希望能帮助到你!!

于 2013-10-16T09:29:41.900 回答