2010-12-10 94 views
0

这是我的应用程序使用如何让我的应用程序URL漂亮(SEF)与htaccess的

http://mydomain.com/index.php 
http://mydomain.com/video.php?id=29 
http://mydomain.com/news.php?id=33 
http://mydomain.com/photos.php?albumid=10 
http://mydomain.com/archive.php 
http://mydomain.com/album.php 
http://mydomain.com/contact.php 

我想让米的URL看起来干净htaccess的像

http://mydomain.com/video/id/29 
http://mydomain.com/news/id/33 
http://mydomain.com/photos/albumid/10 
http://mydomain.com/archive 
http://mydomain.com/album 
http://mydomain.com/contact 

问题的网址较旧的应用程序已经在根目录中使用了大量的htaccess代码。这里是在htaccess中已经存在的代码。

php_value post_max_size 100M 
php_value upload_max_filesize 100M 
php_value memory_limit 100M 

# 
# Apache/PHP/osTube settings: 
# 

# Don't show directory listings for URLs which map to a directory. 
#Options -Indexes 

# Follow symbolic links in this directory. 
#Options +FollowSymLinks 

# Set the default handler. 
#DirectoryIndex index.php 

# Override some PHP settings. 

# PHP 4, Apache 1. 
<IfModule mod_php4.c> 
    php_value error_reporting 6135 
</IfModule> 

# PHP 4, Apache 2. 
<IfModule sapi_apache2.c> 
    php_value error_reporting 6135 
</IfModule> 

# PHP 5, Apache 1 and 2. 
<IfModule mod_php5.c> 
    php_value error_reporting 6135 
</IfModule> 

# Deny access to certain files 
<Files "convert.php"> 
Order Deny,Allow 
Deny from All 
</Files> 

# Various rewrite rules. 
<IfModule mod_rewrite.c> 
    RewriteEngine on 

    # If your site can be accessed both with and without the prefix www. you 
    # can use one of the following settings to force user to use only one option: 
    # 
    # If you want the site to be accessed WITH the www. only, adapt and 
    # uncomment the following: 
    # RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
    # RewriteRule .* http://www.example.com/ [L,R=301] 
    # 
    # If you want the site to be accessed only WITHOUT the www. prefix, adapt 
    # and uncomment the following: 
    # RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] 
    # RewriteRule .* http://example.com/ [L,R=301] 

    # Modify the RewriteBase if you are using osTube in a subdirectory and 
    # the rewrite rules are not working properly. 
    # RewriteBase /ostube 

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

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(video|audio|document|photo)/([0-9]+)(/[^/]+)?/?(.*)$ mediadetails.php?mid=$2&$4 [L,QSA,NC] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^Video(.*)$ media.php?type=video$1 [L,QSA,NC] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^Audio(.*)$ media.php?type=audio$1 [L,QSA,NC] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^Document(.*)$ media.php?type=document$1 [L,QSA,NC] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^Photo(.*)$ media.php?type=photo$1 [L,QSA,NC] 

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

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

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^weblog/([0-9]+)(/[^/]+)?/?(.*)$ blog.php?action=post&pid=$1&$3 [L,QSA,NC] 

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

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^Channel/(video|audio|document|photo)/([0-9]+)(/[^/]+)?/?(.*)$ media.php?type=$1&chid=$2$4 [L,QSA,NC] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^Tag/([0-9]+)/?(.*)$ search_result.php?tid=$1&$2 [L,QSA,NC] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^User/([^/]+)/?(.*)$ userprofile.php?uname=$1$2 [L,QSA,NC] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^WebTV/([^/]+)/([0-9]+)(.*)$ webtv.php?mode=$1&id=$2$3 [L,QSA,NC] 

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

    RewriteRule ^flvplayer.swf vimp.swf [L,QSA,NC] 
    RewriteCond %{QUERY_STRING} ^mediaid=(\d+)&action=getmediainfo$ 
    RewriteRule ^$ flashcomm.php?mediaid=%1&action=getmediainfo [L,NC] 
    RewriteCond %{QUERY_STRING} ^action=getmediainfo&mediaid=(\d+)$ 
    RewriteRule ^$ flashcomm.php?mediaid=%1&action=getmediainfo [L,NC] 

    #RewriteCond %{REQUEST_FILENAME} !-f 
    #RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^sitemap.xml$ sitemap.php [L,QSA,NC] 
</IfModule> 

,我应该使用什么样的代码Rewrite_rule也是,如果有人能指导我的教程我会在哪里能够理解htaccess以及也正则表达式我将不胜感激。

此外,我想禁用文件查看选项索引或我不记得确切的东西。

谢谢你..

回答

0

请尝试以下

#Turn off option indexes 
Options -Indexes 

RewriteCond %{REQUEST_URI} "/js/" [OR] 
RewriteCond %{REQUEST_URI} "/images/" [OR] 
RewriteCond %{REQUEST_URI} "/css/" 
RewriteRule (.*) $1 [L] 

#Rewrite Rules 
RewriteRule ^video/(.*) /video.php?id=$1 [L] //This gives you domain.com/video/33 
RewriteRule ^video/id/(.*) /video.php?id=$1 [L] //This gives you domain.com/video/id/33 

第一部分:^video/(.*)是你想要你的URL看起来像。 (.*)是一个变量的占位符。第二部分/video.php?id=$1是要重写的实际URL。 $1是将在第一部分中替换的变量。

RewriteCond规则告诉我们忽略这些文件夹,不要重写它们。

希望这会有所帮助。 Sitepoint有一个很好的初学者文章使用mod_rewrite - http://articles.sitepoint.com/article/guide-url-rewriting

+0

我不知道这究竟是如何工作的。我尝试在htaccess中使用以下代码#Rewrite Rules RewriteRule^news/id /(.*)/news.php?id=$1 [L]当我尝试使用http://mydomain.com/news打开它时/ id/33它不加载任何图像或js或css文件,并将此代码添加到我的所有js和css文件中。 出了什么问题? – 2010-12-10 12:51:15

+0

已编辑主帖 – 2010-12-10 13:05:23

+0

谢谢matt。 – 2010-12-21 08:22:44